package com.example.baseapp.activity

import android.os.Bundle
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import com.example.baseapp.R
import com.example.baseapp.constants.BEAUTIFUL_SENTENCE
import com.example.baseapp.constants.FILE_NAME
import kotlinx.android.synthetic.main.activity_file_save.*
import java.io.*

/**
 * @作者：HuaCon
 *
 * @类描述：文件存储
 *
 */
class FileSaveActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_file_save)
        tv_write.setOnClickListener {
            //普通写法
            // normalSave(BEAUTIFUL_SENTENCE)
            //使用use函数写法
            useSave(BEAUTIFUL_SENTENCE)
        }

        tv_reader.setOnClickListener {
            tv_show.text = readFile()
        }
    }

    /**
     * 使用use读流
     */
    private fun readFile(): String? {
        val inputStream = openFileInput(FILE_NAME)
        val reader = BufferedReader(InputStreamReader(inputStream))
        val content = StringBuilder()
        //不用手动关流
        reader.use {
            reader.forEachLine {
                content.append(it)
            }
        }
        return content.toString()
    }

    /**
     * 普通写方式流
     * 两种文件操作方式：
     * 1. MODE_PRIVATE ：如果有同名文件，内容会被覆盖，没有则创建
     * 2. MODE_APPEND  ：如果有同名文件，内容会被追加，没有则创建
     */
    private fun normalSave(str: String?) {
        val stream = openFileOutput("data.txt", MODE_PRIVATE)
        val writer = BufferedWriter(OutputStreamWriter(stream))
        writer.write(str)
        writer.flush()
        //手动关流
        writer.close()
        showToast()
    }


    /**
     * 用use函数写流
     */
    fun useSave(intputStr: String?) {
        val outStream = openFileOutput(FILE_NAME, MODE_APPEND)
        val writer = BufferedWriter(OutputStreamWriter(outStream))
        //不用手动关流
        writer.use { it.write(intputStr) }
        showToast()
    }

    private fun showToast() {
        Toast.makeText(
            applicationContext,
            "文件已经保存到${File.separator}data${File.separator}data${File.separator}$packageName${File.separator}files目录下",
            Toast.LENGTH_SHORT
        ).show()
    }

}